package com.greate.community.mapper;

import com.greate.community.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {

    /**
     * 根据 id 查询用户
     * @param id
     * @return
     */
    User selectById (int id);

    /**
     * 根据 username 查询用户
     * @param username
     * @return
     */
    User selectByName(String username);

    /**
     * 根据 email 查询用户
     * @param email
     * @return
     */
    User selectByEmail(String email);

    /**
     * 插入用户（注册）
     * @param user
     * @return
     */
    int insertUser(User user);

    /**
     * 修改用户状态
     * @param id
     * @param status 0：未激活，1：已激活
     * @return
     */
    int updateStatus(int id, int status);

    /**
     * 修改头像
     * @param id
     * @param headerUrl
     * @return
     */
    int updateHeader(int id, String headerUrl);

    /**
     * 修改密码
     * @param id
     * @param password 新密码
     * @return
     */
    int updatePassword(int id, String password);

    /**
     * 查询所有用户
     * @return
     */
    List<User> selectAllUsers();

    /**
     * 根据条件查询用户
     * @param keyword
     * @param status
     * @param offset
     * @param limit
     * @return
     */
    List<User> searchUsers(String keyword, Integer status, int offset, int limit);

    /**
     * 根据条件查询用户数量
     * @param keyword
     * @param status
     * @return
     */
    int getUserCount(String keyword, Integer status);

    /**
     * 修改用户
     * @param user
     */
    void updateUser(User user);

    /**
     * 删除用户
     * @param id
     */
    void deleteUser(int id);

    /**
     * 更新用户类型
     * @param id 用户ID
     * @param type 用户类型
     * @return 更新的行数
     */
    int updateType(@Param("id") int id, @Param("type") int type);

    // 搜索用户
    List<User> searchUsers(@Param("keyword") String keyword,
                          @Param("status") Integer status,
                          @Param("type") Integer type,
                          @Param("offset") int offset,
                          @Param("limit") int limit);

    // 获取用户总数
    int getUserCount(@Param("keyword") String keyword,
                    @Param("status") Integer status,
                    @Param("type") Integer type);
}
